package ru.toxsoft.l2.core.dlm;

import org.toxsoft.core.tslib.utils.plugins.*;

//import ru.toxsoft.tslib.plugins.IPluginInfo;

/**
 * Фабрика для создания экземпляра динамически загружаемого модуля.
 * <p>
 * Загрузка модуля происходит следующим образом: в манифесте плагина (плагин - это JAR-файл) указано имя класса фабрики
 * модуля. Менеджер плагинов заружает плагин, создает экземпляр фабрики и отдает его менеджеру модулей. Уже менеджер
 * модулей создает DLM-модуль методом {@link #createDlm(IDlmContext)} и осуществляет управление жизненным циклом модуля.
 *
 * @author goga
 */
public interface IDlmFactory {

  /**
   * Задает информацию о плагине, из которого была загружена фабрика.
   * <p>
   * Этот метод вызывается первым, сразу после конструктора (посколку конструктор без аргументов). На основе информации
   * о плагине фабрика может и должна соформировать свое описание {@link #info()}.
   *
   * @param aPluginInfo {@link IPluginInfo} - информация о плагине - источнике фабрики
   */
  void setPluginIngfo( IPluginInfo aPluginInfo );

  /**
   * Возвращает информацию о модуле, которую создает эта фабрика
   * <p>
   * Это та же информация, которую возвращает созданный фабрикой модуль в методе {@link IDlm#info()}.
   *
   * @return {@link IDlmInfo} - информация о создаваемом модуле
   */
  IDlmInfo info();

  /**
   * Создает DLM-модуль.
   *
   * @param aDlmContext {@link IDlmContext} - контекст выполнения создаваемого модуля
   * @return {@link IDlm} - новый экземпляр модуля
   */
  IDlm createDlm( IDlmContext aDlmContext );

}
